前言

把高程的相关部分又看了一部分,所以整理一下笔记…..题外话:做了一天课设想吐,果然自己不想搞硬件,好好做前端吧(看看写不写的完吧)

创建对象

主要的模式如下

  • 工厂模式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function createPerson(name,age,job){
    var o =new Object();
    o.name=name;
    o.age= name;
    o.job=job;
    o.sayName = function(){
    console.log(this.name);
    }
    return o;
    }
    var person1=createPerson("Nicholas",29, "Sofeware Engineer");
    var person2=createPerson("lizehong", "Doctor");

没有解决对象识别问题(怎么知道一个对象的类型)

  • 构造函数模式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function Person(name,age,job){
    this.name=name;
    this.age=age;
    this.job=job;
    this.sayName = function(){
    console.log(this.name);
    };
    }
    var person1 = new Person("Nicholas",29,"Software Engineer");
    var person2 = new Person("Greg",27,"Doctor");
    console.log(person1.constructor == Person); //true
    console.log(person2.constructor==Person); //true

construct为构造函数属性,指向Person;
person1和person2的同名函数是不相等的
可通过原型函数解决这个问题

1
console.log(person1.sayName==person2.sayName);//false

原型模式

what is 原型

当创建一个函数时,会同时创建一个prototype属性,这个属性指向函数的原型对象。而原型对象都会自动获得一个constructor属性,指向prototypen属性所在的函数的指针比如:
Person.prototype.constructor指向Person 当调用构造函数创建一个新的实例时,该实例包含一个指针,指向构造函数的原型对象可称为[[Prototype]],可通过isPrototypeOf()方法来确定对象是否存在这种关系

1
2
console.log(Person.prototype.isPrototypeOf(person1);
console.log(Person.prototype,isPrototypeOf(person2);

…..有待更新